package com.tbit.main.service;

import com.tbit.main.h2.pojo.ParkPoint;
import com.tbit.main.pojo.*;
import com.tbit.common.entity.GPS.CarHistory;
import com.tbit.main.pojo.VO.UpKeepRespVO;

import java.util.List;

/**
 * 校准service
 *
 * @author Leon
 * 2017年2月24日 下午4:09:17
 */
public interface CalibrateService {
    /**
     * 单个校准
     *
     * @param terPosition
     * @param mapType
     */
    void calibrateOffSet(TerPosition terPosition, int mapType);

    /**
     * 单个校准
     *
     * @param powerChangeLogExpand
     * @param mapType
     */
    void calibrateOffSet(PowerChangeLogExpand powerChangeLogExpand, int mapType);

    /**
     * 单个校准
     *
     * @param workOrder
     * @param mapType
     */
    void calibrateOffSet(WorkOrder workOrder, int mapType);

    /**
     * 轨迹校准
     *
     * @param terPositions
     * @param mapType
     */
    void calibrateOffSet(List<TerPosition> terPositions, int mapType);

    /**
     * 停车点数据校准
     *
     * @param parkPoints
     * @param mapType
     */
    void celibrateParkPoint(List<ParkPoint> parkPoints, int mapType);

    /**
     * 热点数据校准
     *
     * @param hotIntelligentSites
     * @param mapType
     */
    void celibrateHotSite(List<HotIntelligentSite> hotIntelligentSites, int mapType);

    /**
     * 停车点数据校准
     *
     * @param parkPoints
     * @param mapType
     */
    void celibrateParkPointOne(ParkPoint parkPoints, int mapType);

    /**
     * 禁停区校准
     *
     * @param prohibitAreas
     * @param mapType
     */
    void celibrateProhibitArea(List<ProhibitArea> prohibitAreas, int mapType);

    /**
     * 通用校准接口（原始坐标、百度坐标、谷歌坐标之间相互转换）
     *
     * @param point
     * @param from
     * @param to
     * @return
     */
    Point commonCalibrate(Point point, Integer from, Integer to);

    /**
     * 校准停车点
     *
     * @param parkPoint
     * @param oriMapType
     */
    void calParkPoint(ParkPoint parkPoint, Integer oriMapType, Integer targetMapType);

    /**
     * 校准扣押区
     *
     * @param detentionArea
     * @param oriMapType
     */
    void calDetentionArea(DetentionArea detentionArea, Integer oriMapType, Integer targetMapType);

    /**
     * 校准禁停区
     *
     * @param prohibitArea
     * @param oriMapType
     * @param targetMapType
     */
    void calProhibitArea(ProhibitArea prohibitArea, Integer oriMapType, Integer targetMapType);

    /**
     * 充电坊校验
     *
     * @param mapType
     */
    void calibrateChargeHouse(List<ChargeHouse> chargeHouses, int mapType);
    /**
     * 仓库校验
     *
     * @param mapType
     */

    void calibrateWareHouse(List<Warehouse> warehouses, int mapType);

    void calibrateWareHouseSin(Warehouse warehouses, int mapType);

    void calibrateDetentionArea(DetentionArea detentionArea, int mapType);

    /**
     * 标准充电坊
     *
     * @param chargeHouse
     * @param oriMapType
     * @param targetMapType
     */
    void calChargeHouse(ChargeHouse chargeHouse, Integer oriMapType, Integer targetMapType);


    //标准仓库
    void calWarehouse(Warehouse warehouse, Integer oriMapType, Integer targetMapType);

    /**
     * 校准电子围栏
     *
     * @param geo
     * @param oriMapType
     * @param targetMapType
     */
    void calGeo(Geo geo, Integer oriMapType, Integer targetMapType);

    /**
     * 校准单个围栏分区
     *
     * @param georeGion
     * @param oriMapType
     * @param targetMapType
     */
    void calGeoreGion(GeoreGion georeGion, Integer oriMapType, Integer targetMapType);

    /**
     * 校准多个围栏分区
     *
     * @param georeGions
     * @param mapType
     */
    void celibrateGeoreGion(List<GeoreGion> georeGions, int oriMapType, int mapType);

    /**
     * 设备最后状态校准
     *
     * @param machineStatuses
     * @param mapType
     */
    void celibrateMachineStatus(List<MachineStatus> machineStatuses, int mapType);

    /**
     * 未完成工单校准
     *
     * @param workOrderFinishings
     * @param mapType
     */
    void celibrateWorkOrderFinish(List<WorkOrderFinishing> workOrderFinishings, int mapType);

    /**
     * 未完成工单校准
     *
     * @param workOrders
     * @param mapType
     */
    void celibrateWorkOrder(List<WorkOrder> workOrders, int mapType);

    /**
     * 最后状态借出校准
     *
     * @param machineStatusBorrows
     * @param mapType
     */
    void celibrateMachineStatusBorrow(List<MachineStatusBorrow> machineStatusBorrows, int mapType);

    /**
     * 校准挪车记录
     *
     * @param moveLog
     * @param oriMapType
     * @param targetMapType
     */
    void calMoveLog(MoveLog moveLog, Integer oriMapType, Integer targetMapType);

    /**
     * 校准垂直定位配置经纬度
     *
     * @param parkPointVert
     * @param
     */
    <T> void calPolygon(T parkPointVert, Integer oriMapType, Integer targetMapType);

    /**
     * 校准垂直停车线
     *
     * @param parkPointVert
     * @param oriMapType
     * @param targetMapType
     */
    public void calParkPointVert(ParkPointVert parkPointVert, Integer oriMapType, Integer targetMapType);

    /**
     * 校准多个垂直停车线
     *
     * @param parkPointVertList
     * @param oriMapType
     * @param targetMapType
     */
    public void calParkPointVertList(List<ParkPointVert> parkPointVertList, Integer oriMapType, Integer targetMapType);

    /**
     * 设备最后扫码记录校准
     *
     * @param machineLastUseLogs
     * @param mapType
     */
    void calibrateMachineLastUseLog(List<MachineLastUseLog> machineLastUseLogs, int mapType);

    /**
     * 标准设备最后扫码记录
     *
     * @param machineLastUseLog
     * @param oriMapType
     * @param targetMapType
     */
    void calMachineLastUseLog(MachineLastUseLog machineLastUseLog, Integer oriMapType, Integer targetMapType);

    /**
     * 打卡日志
     *
     * @param accountUserWorks
     */
    void calibrateUserWork(List<AccountUserWork> accountUserWorks, int mapType);

    /**
     * 打卡日志
     *
     * @param accountUserWork
     * @param oriMapType
     * @param targetMapType
     */
    void calTerUserWork(AccountUserWork accountUserWork, Integer oriMapType, Integer targetMapType);

    /**
     * 运维最后轨迹点
     *
     * @param accountUserLastPos
     * @param mapType
     */
    void calibrateLastPos(AccountUserLastPos accountUserLastPos, int mapType);

    /**
     * 运维最后轨迹点
     *
     * @param accountUserLastPos
     * @param mapType
     */
    void calibrateLastPosS(List<AccountUserLastPos> accountUserLastPos, int mapType);

    /**
     * GPS查车轨迹点
     *
     * @param carHistories
     */
    void calibrateGPSLastPosS(List<CarHistory> carHistories, int mapType);

    /**
     * GPS查车轨迹点
     *
     * @param carHistories
     */
    void calibrateGPSLastPos(CarHistory carHistories, int mapType);


    /**
     * 校准轨迹
     *
     * @param terPosition
     * @param oriMapType
     * @param targetMapType
     */
    void calTerPosition(TerPosition terPosition, Integer oriMapType, Integer targetMapType);

    void calibrateOffSetReturn(List<ReturnPosLog> terPositions, int mapType);

    void calibrateOffSetBorrow(List<BorrowPosLog> terPositions, int mapType);

    void calibrateOffSetReturnBikeMsgLog(List<ReturnBikeMsgLog> terPositions, int mapType);

    void calibrateMachined(Machine byUseCodeMachine, Integer mapType);

    void calibrateUpKeeps(List<UpKeepRespVO> list, Integer mapType);
}